package com.kr.aia.powerrp.roleplay;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.SeekBar;
import android.widget.Switch;
import android.widget.ToggleButton;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

import com.kr.aia.powerrp.common.MainMovieClipListView;
import com.kr.aia.powerrp.common.RecController;
import com.kr.aia.powerrp.common.VideoPlayController;
import com.kr.aia.powerrp.common.commonUtil;
import com.kr.aia.powerrp.common.VideoPlayController.onTestCompletionListener;
import com.kr.aia.powerrp.db.RPGroupDBUtil;
import com.kr.aia.powerrp.db.RPGroupInfoVO;
import com.kr.aia.powerrp.R;

public class RPMain extends Activity implements OnClickListener{
	private String dirName;
    private String dataPath;
    private String rpGroupContent;
    private int rpDataOrder = 0;
    private int rpSelectionOrder = 0;
    private commonUtil comUtil;
    
    private RPGroupDBUtil rpGroupDataSource;
	private ArrayList<RPGroupInfoVO> rpGroupData1;
	private ArrayList<RPGroupInfoVO> rpGroupData2;
	private ArrayList<RPGroupInfoVO> rpGroupData3;
	
	private Switch rp_main_swtich;
    private ToggleButton rp_main_grp1;
    private ToggleButton rp_main_grp2;
    private ToggleButton rp_main_grp3;
    private int rp_main_selected_grp = 1;
    
    private ArrayList<RPDataVO> rpData;
    private ArrayAdapter<RPDataVO> rpDataAdapter;
    private ArrayAdapter<RPDataVO> rpDataGroupAdapter;
	
	private LinearLayout recorderView;
    private RecController recorderController;
    
    private VideoPlayController videoController;
    private MainMovieClipListView mcv;
    
    private Button rp_btn_home;
    
    private Button rp_btn_select;
    private Button rp_btn_movies;
    private Button rp_btn_modify;
    
    private Button rp_btn_select_pic;
    private Button rp_btn_take_pic;
    private Button rp_btn_hide_pic;
    private Button rp_btn_show_pic;
    
    //private VerticalMarqueeTextView rpTextView;
    private TextView rpTextView;
    private LinearLayout rpTextBg;
    private ScrollView rpTextSroller;
    
    private ImageButton rp_btn_record;
    private ImageButton rp_btn_stop;
    
    private ImageButton btn_rp_marquee_play;
    private ImageButton btn_rp_marquee_stop;
    private ImageButton btn_rp_marquee_reset;
    
    
    private SeekBar rp_seekbar_size;
    private SeekBar rp_seekbar_speed;
       
    
    private int curRPIdx;
    private String curRPTxt;
    
    private Drawable selectedGalleryImg;
    
    final private int CAMERA = 0;
    final private int GALLERY = 1;
    
    

    Boolean isBottom = true;
    long speed = 50;
    
    public void onPause() {
        super.onPause();
        isBottom = true;
    }
    
    @Override
    public void onResume(){
    	super.onResume();
    	
    	rpGroupData1 = rpGroupDataSource.getAllData(1);
        rpGroupData2 = rpGroupDataSource.getAllData(2);
        rpGroupData3 = rpGroupDataSource.getAllData(3);
        
        /*for(int i = 0 ; i < rpGroupData2.size() ; i++){
        	Log.e("PRP", rpGroupData2.get(i).getFileName());
        }*/
    }
    
    @Override
    public void onDestroy(){
    	rpGroupDataSource.close();
    	Log.e("PRP", "DB CLOSED");
    	super.onDestroy();
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rp_main);
        comUtil = new commonUtil();
        
        // 객체 등록
        rp_btn_home			= (Button) findViewById(R.id.rp_btn_home);
        rp_btn_modify		= (Button) findViewById(R.id.rp_btn_modify);
        rp_btn_select		= (Button) findViewById(R.id.rp_btn_select);
        rp_btn_movies		= (Button) findViewById(R.id.rp_btn_movies);
        
        rp_btn_select_pic	= (Button) findViewById(R.id.rp_btn_select_pic);
        rp_btn_take_pic		= (Button) findViewById(R.id.rp_btn_take_pic);
        rp_btn_hide_pic		= (Button) findViewById(R.id.rp_btn_hide_pic);
        rp_btn_show_pic		= (Button) findViewById(R.id.rp_btn_show_pic);
        
        rp_btn_record		= (ImageButton) findViewById(R.id.rp_btn_record);
        rp_btn_stop			= (ImageButton) findViewById(R.id.rp_btn_stop);
        
        btn_rp_marquee_play = (ImageButton) findViewById(R.id.btn_rp_marquee_play);
        btn_rp_marquee_stop	= (ImageButton) findViewById(R.id.btn_rp_marquee_stop);
        btn_rp_marquee_reset= (ImageButton) findViewById(R.id.btn_rp_marquee_reset);

        rpTextView			= (TextView) findViewById(R.id.rpTextView);
        rpTextBg			= (LinearLayout) findViewById(R.id.rpTextBg);
        rpTextSroller		= (ScrollView) findViewById(R.id.rpTextSroller);
        
        recorderView		= (LinearLayout) findViewById(R.id.rp_preview);
        
        rp_seekbar_size		= (SeekBar) findViewById(R.id.rp_seekbar_size);
        rp_seekbar_speed	= (SeekBar) findViewById(R.id.rp_seekbar_speed);
        
        rp_main_swtich		= (Switch) findViewById(R.id.rp_main_swtich);
        rp_main_grp1		= (ToggleButton) findViewById(R.id.rp_main_grp1);
        rp_main_grp2		= (ToggleButton) findViewById(R.id.rp_main_grp2);
        rp_main_grp3		= (ToggleButton) findViewById(R.id.rp_main_grp3);
        
        rp_main_grp1.setChecked(true);
        rp_main_grp1.setEnabled(false);
        rp_main_grp2.setEnabled(false);
        rp_main_grp3.setEnabled(false);
        
        
        this.rpData = new ArrayList<RPDataVO>();
        
        dirName = "/powerRP/txt/rp";
        dataPath = Environment.getExternalStorageDirectory().getPath() + dirName;
        
        // 최초 실행시 폴더가 없으면 폴더 생성
        comUtil.isDirectory(dataPath);
        
        if(true){
        	File file = new File(dataPath);
        	int fileCount = 0;
        	
        	FileInputStream fis = null;
        	BufferedReader br = null;
        	String strLine, strValue = "";
        	
        	for(File dirFile : file.listFiles()) {
        	    if(dirFile.isFile()) {
        	    	if(dirFile.getName().toString().contains("closing")){
        	    		continue;
        	    	}
        	    	
        	        fileCount++;
        	        
        	        try {
	        	        fis = new FileInputStream(dataPath + "/" + dirFile.getName());
	    				br  = new BufferedReader(new InputStreamReader(fis));
	    				strValue = "";
	    				while( (strLine = br.readLine()) != null )
	    					strValue += strLine + "\n";
	    				
	    				this.rpData.add(new RPDataVO(dirFile.getName().substring(0, dirFile.getName().length()-4), strValue, 0));
        	        } catch (IOException e) {
        				Toast toast = Toast.makeText(getApplicationContext(), "파일 읽기 실패. 다시 시도하세요.", Toast.LENGTH_SHORT); 
        				toast.show();
        				finish();
        			}
        	    }
        	}
        }
        
        
        rpGroupDataSource = new RPGroupDBUtil(this);
        rpGroupDataSource.open();
        
        // Video View 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
        String currentDate = sdf.format(new Date());
        
        recorderController = new RecController(this, "rp");
        recorderView.addView(recorderController);
        
        
        rpTextView.setMovementMethod(new ScrollingMovementMethod());
        //rpTextView.stopMarquee();
        
        // 클릭 리스너 등록
        rp_btn_home.setOnClickListener(this);
        
        rp_btn_select.setOnClickListener(this);
        rp_btn_movies.setOnClickListener(this);
        rp_btn_modify.setOnClickListener(this);
        
        rp_btn_select_pic.setOnClickListener(this);
        rp_btn_take_pic.setOnClickListener(this);
        rp_btn_hide_pic.setOnClickListener(this);
        rp_btn_show_pic.setOnClickListener(this);
        
        rp_btn_record.setOnClickListener(this);
        rp_btn_stop.setOnClickListener(this);
        
        btn_rp_marquee_play.setOnClickListener(this);
        btn_rp_marquee_stop.setOnClickListener(this);
        btn_rp_marquee_reset.setOnClickListener(this);
        
        
        rp_main_grp1.setOnClickListener(this);
        rp_main_grp2.setOnClickListener(this);
        rp_main_grp3.setOnClickListener(this);
        
        
        rp_seekbar_size.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {       

		    @Override       
		    public void onStopTrackingTouch(SeekBar seekBar) {      
		        // TODO Auto-generated method stub 
		    	rpTextView.setTextSize((float) (20.0 + (seekBar.getProgress() * 0.2)));
		    }       

		    @Override       
		    public void onStartTrackingTouch(SeekBar seekBar) {     
		        // TODO Auto-generated method stub      
		    }       

		    @Override       
		    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {     
		        // TODO Auto-generated method stub
		    }
		});
        
        
        rp_seekbar_speed.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {       

		    @Override       
		    public void onStopTrackingTouch(SeekBar seekBar) {      
		        // TODO Auto-generated method stub      
		    }       

		    @Override       
		    public void onStartTrackingTouch(SeekBar seekBar) {     
		        // TODO Auto-generated method stub      
		    }       

		    @Override       
		    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {     
		        // TODO Auto-generated method stub
		    	speed = (long) (50.0 - (progress * 0.3));
		        //Toast.makeText(getApplicationContext(), String.valueOf(progress),Toast.LENGTH_LONG).show();
		    }
		});
        
        
        
        rp_main_swtich.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
				// TODO Auto-generated method stub
				boolean on = ((Switch) arg0).isChecked();
	            
	            if (on) {
	            	//Log.e("PRP", " 0000000000000000000 : " + rp_main_selected_grp);
	            	if(rp_main_selected_grp == 2){
	            		rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData2);
	            	}else if(rp_main_selected_grp == 3){
	            		rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData3);
	            	}else{
	            		rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData1);
	            	}
	            	rpTextView.setText(rpGroupContent);
	            	
	            	rp_main_grp1.setEnabled(true);
	                rp_main_grp2.setEnabled(true);
	                rp_main_grp3.setEnabled(true);
	                
	            	/*
	            	
	            	
	            	rpListView.invalidateViews();
	            	rpListView.setAdapter(rpDataGroupAdapter);
	            	rpListView.setItemsCanFocus(true);
	            	rpListView.setOnItemClickListener(new OnItemClickListener() {
	                    @Override
	                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	                    	RPDataVO tmp = (RPDataVO)parent.getAdapter().getItem(position);
	                    	((RPDataGroupListAdapter) rpDataGroupAdapter).setSelectedItem(position);
	                    	
	                    	if(rpData.get(position).getOrder() < 1){
	                    		rpDataOrder++;
	                    		rpData.get(position).setOrder(rpDataOrder);
	                    	}
	                    	rpDataGroupAdapter.notifyDataSetChanged();
	                    	rp_main_text.setText(rp_main_text.getText() + "\n\n[" + tmp.getTitle() + "]\n" + tmp.getContent());
	                    }
	                });
	            	
	            	
	            	rp_main_grp1.setEnabled(true);
	                rp_main_grp2.setEnabled(true);
	                rp_main_grp3.setEnabled(true);
	                
	                rp_main_text.setFocusable(false);
	                
	                comUtil.makeDisabledButton(rp_main_btn_save_grp, false);
	                comUtil.makeDisabledButton(rp_main_btn_del_grp, false);
	                
	                comUtil.makeDisabledButton(rp_main_btn_new, true);
	                comUtil.makeDisabledButton(rp_main_btn_save, true);
	                comUtil.makeDisabledButton(rp_main_btn_savenew, true);
	            	*/
	            } else {
	            	
	            	
	            	rp_main_grp1.setEnabled(false);
	                rp_main_grp2.setEnabled(false);
	                rp_main_grp3.setEnabled(false);
	                
	            	/*
	            	rpListView.invalidateViews();
	            	rpListView.setAdapter(rpDataAdapter);
	            	rpListView.setOnItemClickListener(new OnItemClickListener() {
	                    @Override
	                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	                    	RPDataVO tmp = (RPDataVO)parent.getAdapter().getItem(position);
	                    	((RPDataListAdapter) rpDataAdapter).setSelectedItem(position);
	                    	rpDataAdapter.notifyDataSetChanged();
	                    	rp_main_text.setText(tmp.getContent());
	                    }
	                });
	            	
	                
	                rp_main_text.setFocusable(true);
	                
	                comUtil.makeDisabledButton(rp_main_btn_save_grp, true);
	                comUtil.makeDisabledButton(rp_main_btn_del_grp, true);
	                
	                comUtil.makeDisabledButton(rp_main_btn_new, false);
	                comUtil.makeDisabledButton(rp_main_btn_save, false);
	                comUtil.makeDisabledButton(rp_main_btn_savenew, false);
	                */
	            }
			}
        });

    }
    
    /*
    @Override
	protected void onDestroy() {
    	//rpTextView.stopMarquee();
		//super.onDestroy();
	}
	*/
    
    @Override
    public void onClick(View v){
    	switch(v.getId()){
    		case R.id.rp_btn_home:
    			finish();
    			break;
    		case R.id.rp_main_grp1:
    			rp_main_selected_grp = 1;
    			rp_main_grp1.setChecked(true);
    			rp_main_grp2.setChecked(false);
    			rp_main_grp3.setChecked(false);
                
                rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData1);
            	rpTextView.setText(rpGroupContent);
    			break;
			case R.id.rp_main_grp2:
				rp_main_selected_grp = 2;
				rp_main_grp1.setChecked(false);
				rp_main_grp2.setChecked(true);
				rp_main_grp3.setChecked(false);
                
                rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData2);
            	rpTextView.setText(rpGroupContent);
			    break;
			case R.id.rp_main_grp3:
				rp_main_selected_grp = 3;
				rp_main_grp1.setChecked(false);
				rp_main_grp2.setChecked(false);
				rp_main_grp3.setChecked(true);
                
                rpDataOrder = 0 + bindingRpGroupOrder(rpGroupData3);
            	rpTextView.setText(rpGroupContent);
                
				break;
    		case R.id.rp_btn_select:
    			btn_rp_marquee_play.setVisibility(View.VISIBLE);
    			btn_rp_marquee_stop.setVisibility(View.GONE);
    			
    			curRPIdx = 0;
    			curRPTxt = "";
    			rpTextView.setText(curRPTxt);
    			rpTextSroller.scrollTo(0, 0);
    			rpSelectionOrder = 0;			// rp 선택하는 순서 초기화
    			for(int i = 0; i < rpData.size(); i++){	// RP 선택 순서 초기화
    	    		rpData.get(i).setOrder(0);
    	        }
    			
    			rpDataAdapter = new RPSelectionAdapter(this, R.layout.rp_main_list_popup_row, rpData);
    			
    			LayoutInflater inflater = ((LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE));
    			View RPView = inflater.inflate(R.layout.rp_main_list_popup_view, null, false);
    			
    			
    			ListView RPList = (ListView) RPView.findViewById(R.id.rp_list_popup);
    			RPList.setAdapter(rpDataAdapter);
    			
    			
    			AlertDialog.Builder rpBuilder = new AlertDialog.Builder(this);
    			
    			rpBuilder
    			.setTitle("Role Play 선택.")
    			.setView(RPView)	// 커스텀 뷰 지정
		   		.setPositiveButton("닫기", new DialogInterface.OnClickListener(){
		   			@Override
					public void onClick(DialogInterface dialog, int which) {
		   				dialog.dismiss();
		   				dialog.cancel();
		   			}
		   		});
    			
    			final AlertDialog rpAlertDialog = rpBuilder.create();
    			rpAlertDialog.show();
    			
    			
    			RPList.setOnItemClickListener(new OnItemClickListener() {
    	            @Override
    	            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    	            	RPDataVO rp = (RPDataVO)parent.getAdapter().getItem(position);
    	            	((RPSelectionAdapter) rpDataAdapter).setSelectedItem(position);
    	            	
    	            	if(rpData.get(position).getOrder() < 1){
    	            		rpSelectionOrder++;
                    		rpData.get(position).setOrder(rpSelectionOrder);
                    	}
                    	if(!rpData.get(position).isSelected){
                    		rpData.get(position).isSelected = true;
                    	}
    	            	
    	            	if(curRPIdx == 0){
    	            		curRPTxt = "\n\n\n\n\n\n\n\n\n";
    	            		curRPIdx++;
    	            	}
    	            	curRPTxt = curRPTxt + "[" + rp.getTitle() + "]\n" +  rp.getContent() + "\n\n";
    	            	rpTextView.setText(curRPTxt);
    	            	rpDataAdapter.notifyDataSetChanged();
    	            	
    	            	//rpAlertDialog.dismiss();
    	        		
    	            }
    	        });
    			break;
    		case R.id.rp_btn_movies:
    			AlertDialog.Builder builder = new AlertDialog.Builder(this);
    			
    		    mcv = new MainMovieClipListView(this, "rp");
    			View mcvView = mcv.openMovieClipListView();
    			
		   		//.setIcon(R.drawable.icon_sja)		// icon 지정 후 Builder 객체 리턴
    			builder.setTitle("동영상 목록")				// title 지정
		   		//.setMessage("메시지 영역")			// 메시지 text 지정
		   		.setView(mcvView)	// 커스텀 뷰 지정
		   		// AlertDialog의 버튼 생성 & 버튼 클릭 이밴트에 대한 Listener 객체 생성/등록 
		   		.setPositiveButton("크게보기", new positiveButtonClickListener())
		   		.setNeutralButton("작게보기", new neutralButtonClickListener())
		   		.setNegativeButton("닫기", new DialogInterface.OnClickListener(){
		   			@Override
					public void onClick(DialogInterface dialog, int which) {
		   				dialog.dismiss();
		   			}
		   		});
    			builder.show(); // 지금까지 설정한 dialog를 화면에 보이고 AlertView객체를 return
    			
    			break;
    		case R.id.rp_btn_modify:
    			Intent rp_main_intent = new Intent(this, RPSetting.class);
    			startActivity(rp_main_intent);
    			//overridePendingTransition(android.R.anim.slide_in_left, R.anim.slide_out_left);
    			break;
    		case R.id.rp_btn_record:
    			try {
                	recorderController.startRecording();
                	
                	rp_btn_record.setVisibility(View.GONE);
                	rp_btn_stop.setVisibility(View.VISIBLE);
                } catch (Exception e) {
                    String message = e.getMessage();
                    Log.e("PRP", "Problem Start: "+message);
                    recorderController.releaseMediaRecorder();
                    
                    rp_btn_record.setVisibility(View.VISIBLE);
                	rp_btn_stop.setVisibility(View.GONE);
                }
    			break;
    		case R.id.rp_btn_stop:
    			try{
    				recorderController.stopRecording();
    				rp_btn_record.setVisibility(View.VISIBLE);
                	rp_btn_stop.setVisibility(View.GONE);
    			}catch(Exception e){
    				rp_btn_record.setVisibility(View.VISIBLE);
                	rp_btn_stop.setVisibility(View.GONE);
    			}finally{
    				
    			}
    			break;
    		case R.id.btn_rp_marquee_play:
    			//int i = 0;
    			/*
    			for(int i = 0 ; i < 10; i++){
    				Log.e("PRP", rpTextSroller.getBottom() + " ------------------ " + rpTextSroller.getScrollY() + " ------- " + rpTextView.getBottom());
    				rpTextSroller.smoothScrollTo(0, i);
    			}
    			*/
    			
    			/*	
    			
    			int tHeight = rpTextSroller.getBottom();
    			int i = 0;
    			while(rpTextSroller.getScrollY() < tHeight){
    				
    				rpTextSroller.post(new Runnable() {
    				    @Override
    				    public void run() {
    				    	rpTextSroller.fullScroll(ScrollView.FOCUS_DOWN);
    				    }
    				});
    				
    				i = i + 50;
    				Log.e("PRP", " ------------------ " + rpTextSroller.getScrollY() + " ------- " + rpTextView.getBottom());
    				try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
    				rpTextSroller.smoothScrollTo(0, i);
    			}
    			*/
    			
    			//rpTextView.startMarquee();
    			if(rpTextView.getText().toString().equals("")){
    				Toast.makeText(this, "파일을 선택 하세요.", Toast.LENGTH_SHORT).show();
    				break;
    			}
    			
    			btn_rp_marquee_play.setVisibility(View.GONE);
    			btn_rp_marquee_stop.setVisibility(View.VISIBLE);
    			scrolling();
    			break;
    		case R.id.btn_rp_marquee_stop:
    			btn_rp_marquee_play.setVisibility(View.VISIBLE);
    			btn_rp_marquee_stop.setVisibility(View.GONE);
    			isBottom = true;
    			break;
    		case R.id.btn_rp_marquee_reset:
    			rpTextSroller.smoothScrollTo(0, 0);
    			break;
    		case R.id.rp_btn_select_pic:
    			Intent galleryIntent = new Intent(Intent.ACTION_PICK);
    			galleryIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.CONTENT_TYPE);
    			startActivityForResult(galleryIntent, GALLERY);
    			break;
    		case R.id.rp_btn_take_pic:
    			Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    			startActivityForResult(cameraIntent, CAMERA);
    			break;
    		case R.id.rp_btn_hide_pic:
    			rpTextBg.setBackgroundDrawable(null);
    			rpTextSroller.setVisibility(View.VISIBLE);
    			break;
    		case R.id.rp_btn_show_pic:
    			rpTextBg.setBackgroundDrawable(selectedGalleryImg);
    			rpTextSroller.setVisibility(View.GONE);
    			break;	
    			
    	}
    }
    
    
    
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	    Intent intent;
    	    Uri cropedImageUri = null;
    	    File toFile = null; // 임시파일을 복사할 경로를 지정하기 위해 선언
    	    File fromFile = null; // 불러올 파일의 경로를 저장하기 위해 선언
    	    // 임시파일을 복사할 때 원본 파일을 읽어오기 위해 선언
    	    FileInputStream inputStream;
    	    // 임시파일을 복사할 때 원본 파일을 임시파일에 쓰기 위해 선언
    	    FileOutputStream outputStream = null;
    	    // 여기서 아까 인텐트를 부를 때 보냈던 상수가 requestCode에 실려 되돌아온다.
    	    
    	    switch (requestCode) { 
	    	    case CAMERA:
	    	        // 만약 사용자가 촬영을 안했거나 다른 이유에 의해 인텐트가 예기치
	    	        // 않게 종료되었을 경우 아래의 과정을 무시한채 종료한다.
	    	        if (resultCode == RESULT_CANCELED) return; 
	    	        if (cropedImageUri != null) {
	    	            // 만약 복사하려는 파일이 존재하면 삭제한다. (임시파일이 쌓이는 것을 방지)
	    	            // 이 것은 본인 선택이다. 임시파일의 경로가 상수라면 상관 없을지도 모른다.
	    	            // 본인은 실행할 때마다 임시파일의 파일명이 바뀌기에 삭제한다.
	    	            File f = new File(cropedImageUri.getPath());
	    	            if (f.exists()) {
	    	                f.delete();
	    	            }
	    	        }
	    	        // 넥서스S에서 Uri를 제대로 얻어오질 못하는데
	    	        // 이 부분을 수정하면 가능 할지도 모르리라 의심만 해본다.
	    	        // 우리가 찾고자 하는 마지막에 등록된 레코드가 있을 테이블이다.
	    	        Uri uriImages = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
	    	        int id = -1; //촬영된 이미지의 DB에서의 ID를 저장할 변수다.
	    	   
	    	        //아래는 DB의 해당 테이블에서 조건에 맞는 레코드의 어떤 필드값을
	    	        //불러올지를 지정하는 것이다.
	    	        //우리는 해당 레코드의 모든 필드값이 필요한 것이 아니기에 한정한다.
	    	        String[] IMAGE_PROJECTION = {
	    	            MediaStore.Images.ImageColumns.DATA, //데이터의 파일 절대 경로(문자열)
	    	            MediaStore.Images.ImageColumns._ID, //데이터의 테이블상의 아이디(정수)
	    	        };
	    	        try {
	    	            // 테이블에서 조건 없이 필드값을 한정해서 불러혼다. 그럼, 갤러리에 보이는
	    	            // 사진이 100개면 Cursor는 100번이나 움직일 수 있다.
	    	            Cursor cursorImages = getContentResolver().query(uriImages, IMAGE_PROJECTION, null, null,null);
	    	            // cursor가 무리없이 열렸고, 마지막으로 이동되었으면 경로를 얻어온다.
	    	            // (마지막 번째에 등록된 이미지의 실 경로를 불러온다는 말이다.
	    	            if (cursorImages != null) {
	    	                if (cursorImages.moveToLast()) {
	    	                    fromFile = new File(cursorImages.getString(0)); //이 것이 경로
	    	                    id = cursorImages.getInt(1); //이 것이 아이디
	    	                    //사실 아이디는 필요 없을지 모르지만, 본인같은 경우는 원본을
	    	                    //남기지 않기 때문에 이 아이디가 필요하다.
	    	                }
	    	                cursorImages.close(); // 커서 사용이 끝나면 꼭 닫아준다.
	    	            }
	    	            
	    	        } catch(Exception e) {
	    	            e.printStackTrace();
	    	        }
	    	        // 임시파일의 경로로서, 본인은 원본과 겹치지 않게 아래와 같이 작성하였다.
	    	        toFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis() + ".jpg");
	    	   
	    	        try {
	    	            // 이 부분이 파일을 복사하는 부분이다.
	    	            // 이 부분이 없으면 CROP할 때 SK W폰에서 다른 이미지를 불러온다.
	    	            // 이유는 모르지만 원본이 소실되거나 DB에서 소실되는 지도 모르겠다.
	    	            inputStream = new FileInputStream(fromFile);
	    	            outputStream = new FileOutputStream(toFile);
	    	            FileChannel fcin = inputStream.getChannel();
	    	            FileChannel fcout = outputStream.getChannel();
	    	    
	    	            long size = fcin.size();
	    	    
	    	            fcin.transferTo(0, size, fcout);
	    	    
	    	            fcout.close();
	    	            fcin.close();
	    	            outputStream.close();
	    	            inputStream.close();
	    	        } catch (FileNotFoundException e) {
	    	            e.printStackTrace();
	    	        } catch (IOException e) {
	    	            e.printStackTrace();
	    	        }
	    	        // 그리고 원본은 지운다.
	    	        fromFile.delete();
	    	        // DB상에 남아있는 원본 레코드도 지운다. 그렇지 않으면 이미지의 존재기록이 
	    	        // 남아서 갤러리에 검은색 썸네일 또는 망가진 이미지 아이콘의 썸네일이 뜬다. 
	    	        // (미관상 안좋음)
	    	        getBaseContext().getContentResolver().delete(
	    	            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
	    	            MediaStore.Images.ImageColumns._ID + "=" + id, 
	    	            null
	    	        );
	    	        // 임시파일 경로를 Uri로 변환한다.
	    	        cropedImageUri = Uri.fromFile(toFile);
	    	        
					Bitmap takenPhoto;
					try {
						takenPhoto = Images.Media.getBitmap( getContentResolver(), cropedImageUri );
						selectedGalleryImg = new BitmapDrawable(getResources(), takenPhoto);
	                    rpTextBg.setBackgroundDrawable(selectedGalleryImg);
	                    rpTextSroller.setVisibility(View.GONE);
					} catch (FileNotFoundException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
                    
	    	        
	    	        /*
	    	        // 그리고 크롭을 실행한다.
	    	        intent = new Intent("com.android.camera.action.CROP");
	    	        intent.setDataAndType(cropedImageUri, "image/*");
	    	        // outputX와 outputY는 자를 크기를 정하는 것이다. 
	    	        // 이 때는 자를 영역이 이동만 가능하다.
	    	        // 크기 변경 안됨
	    	        //intent.putExtra("outputX", GlobalData.dip(this, 460));
	    	        //intent.putExtra("outputY", GlobalData.dip(this, 345));
	    	        // aspectX, aspectY는 자를 영역 크기를 조정시 비율을 정해놓는 것이다.
	    	        //intent.putExtra("aspectX", 4);
	    	        //intent.putExtra("aspectY", 3);
	    	        intent.putExtra("scale", true);
	    	        // output의 경로가 임시파일과 같기 때문에 잘린 이미지는 임시파일에 
	    	        // 덮어쓰이게 되겠다.
	    	        intent.putExtra("output", cropedImageUri);        // CROP역시 클래스 내에서 임의로 만든 상수이다.
	    			startActivityForResult(intent, 9999);
	    			*/
	    			break;
	    	    case GALLERY:
	    	    	try {
                        Uri imgUri = data.getData();
                        Bitmap selPhoto = Images.Media.getBitmap( getContentResolver(), imgUri );
                        selectedGalleryImg = new BitmapDrawable(getResources(), selPhoto);
                        rpTextBg.setBackgroundDrawable(selectedGalleryImg);
                        rpTextSroller.setVisibility(View.GONE);
	    	    	} catch (Exception e) {
	    	    		e.printStackTrace();
	    	    	}
	    	    	
	    	    	break;
    			case 9999 :
    				break;
    	    }
        
    }
    
    
    public void scrolling() {
    	//rpTextView.setHeight(rpTextView.getHeight() + (rpTextSroller.getHeight()/2) + ((rpTextSroller.getHeight()/2) - (rpTextView.getLineCount()*rpTextView.getLineHeight())));
    	rpTextView.setText(rpTextView.getText().toString());
        new Thread(new Runnable() {
            int bottom = rpTextView.getHeight() - rpTextSroller.getHeight();
            
            public void run() {
                if(isBottom) {
                    isBottom = false;
                    runOnUiThread(new Runnable() {
                        public void run() {
                        	//rpTextSroller.scrollTo(0, 0);
                        }
                    });
                    
                    while(!isBottom) {
                        try {
                            runOnUiThread(new Runnable() {
                                public void run() {
                                	rpTextSroller.scrollBy(0, 1);
                                    if(rpTextSroller.getScrollY() == bottom){
                                        isBottom = true;
                                        btn_rp_marquee_play.setVisibility(View.VISIBLE);
                            			btn_rp_marquee_stop.setVisibility(View.GONE);
                                    }
                                }
                            });
                            Thread.sleep(speed);
                            //Log.e("PRP", " textview: " + rpTextView.getHeight() + " scroller: " + rpTextSroller.getHeight());
                        } catch (InterruptedException e) { }
                    }
                    
                } else {
                    isBottom = true;
                }
                //Log.e("PRP", " textview: " + rpTextView.getHeight() + " scroller: " + rpTextSroller.getHeight());
            }
        }).start();
    }
    
    
    
    
    public int bindingRpGroupOrder(ArrayList<RPGroupInfoVO> rpGroupData){
    	int rpGroupDataSize = 0;
    	rpGroupContent = "";
    	if(rpGroupData != null){
    		rpGroupDataSize = rpGroupData.size();
    	}
    	
    	for(int i = 0; i < rpData.size(); i++){
    		rpData.get(i).setOrder(0);
        }
    	
    	for(int j = 0 ; j < rpGroupData.size() ; j++){
    		for(int i = 0; i < rpData.size(); i++){
	    		if(rpData.get(i).getTitle().equals(rpGroupData.get(j).getFileName())){
	    			rpData.get(i).setOrder(rpGroupData.get(j).getFileOrder());
	    			rpGroupContent += "[" + rpData.get(i).getTitle() + "]" + "\n" + rpData.get(i).getContent() + "\n\n";
	    		}
    		}
        }
    	
    	
    	return rpGroupDataSize;
    }
    
    
    public class positiveButtonClickListener implements DialogInterface.OnClickListener{
    	@Override
		public void onClick(DialogInterface dialog, int which) {
			//dialog.dismiss();
			//Log.e("PRP", "----------------- " + intentUri.toString());
			if(mcv.getIntentUri() != null){
				Intent intent = new Intent();
	            intent.setAction(Intent.ACTION_VIEW);
	            intent.setDataAndType(mcv.getIntentUri(), "video/mp4");
	            startActivity(intent);
			}
		}
	};
	
	public class neutralButtonClickListener implements DialogInterface.OnClickListener{
    	@Override
		public void onClick(DialogInterface dialog, int which) {
    		videoController = new VideoPlayController(getApplicationContext(), mcv.getIntentUri().toString());
    		videoController.setOnCompletionListener(onTestClickListener);
    		
    		recorderView.removeView(recorderController);
    		recorderView.addView(videoController);
		}
	};
	
	private onTestCompletionListener onTestClickListener = new onTestCompletionListener()
    {
		@Override
		public void onCompletion(MediaPlayer arg0) {
			recorderView.removeView(videoController);
			recorderView.addView(recorderController);
		}
    };
}